package com.ygqh.baby.service;

import com.ygqh.baby.ao.*;
import com.ygqh.baby.model.EditProductPackRequest;
import com.ygqh.baby.model.ProductPackQueryRequest;
import com.ygqh.baby.model.YgProductPackExt;
import com.ygqh.baby.model.YgProductPackModel;
import com.ygqh.baby.po.YgProduct;
import com.ygqh.baby.po.YgProductPack;

import java.util.Date;
import java.util.List;

/**
 * 自选包第二版
 * 把商品信息抽离出来
 * 增加自选包是否可用券
 * 自选包数量是否累计
 *
 * @author guohao
 * @date 2018-12-11
 */
public interface YgProductPackV2Service {

    YgProductPack findById(Long id);

    int save(YgProductPack ygProductPack);

    int update(YgProductPack ygProductPack);

    ResultSet<YgProductPackExt> search(ProductPackQueryRequest queryRequest);

    int saveOrUpdate(YgProductPack ygProductPack);

    /**
     * 编辑自选包
     *
     * @param packRequest 请求数据
     * @return ResponseEntity
     */
    ResponseEntity editProductPack(EditProductPackRequest packRequest);

    /**
     * 获取自选包商品信息
     *
     * @param packId 自选包id
     * @return List<YgProduct>
     */
    List<YgProduct> findProductByBack(Long packId);

    /**
     * 获取商品列表并标记已参与自选包商品
     *
     * @param queryInfo     分页
     * @param productName   商品名称
     * @param groupId       分组id
     * @param productStatus 商品状态
     * @param supplierId    商家id
     * @param packId        自选包id
     * @return List<YgProduct>
     */
    List<YgProduct> findProductListWithPackSign(QueryInfo queryInfo, String productName, Long groupId, ProductStatus productStatus,
                                                Long supplierId, Long packId);

    /**
     * 获取自选包详情
     *
     * @param packId 自选包id
     * @return YgProductPackExt
     */
    YgProductPackExt getProductPackInfo(Long packId);

    /**
     * 获取自选包 （有效期内）
     *
     * @param productId 商品id
     * @return List<YgProductPackModel>
     */
    List<YgProductPackModel> findPackList(Long productId, Date currentDate);

    List<Long> findProductIdsByPackId(Long relateId);

    List<YgProductPack> findByUpdateTime(Date startTime, Date endTime);

    /**
     * 根据商品id获取自选包
     *
     * @param promotionStatus 自选包状态
     * @param productIds      商品ids
     * @return List<YgProductPack>
     */
    List<YgProductPack> findPackListByProductId(PromotionStatus promotionStatus, Long... productIds);
}